定期的に EC2・RDS インスタンスを停止・起動する仕組みの CloudFormation テンプレート
こんにちは、藤本です。
以前、EC2 を定期的に停止・起動する CloudFormation テンプレートを作成しました。
先日、RDS も停止・起動できるようになったので、 RDS の停止・起動も CloudFormation に組み込み、EC2/RDS を定期的に自動停止・起動できるようにしました。
RDS の停止・起動は制約がありますので、事前に下記エントリを一読することをオススメします。
仕組み
起動/停止それぞれの CloudWatch Events により、指定したcron形式の日時で Lambda が実行され、特定のタグが設定されたインスタンスが起動/停止されます。
リトライ処理が実装されていないため、本番のインスタンスへのご利用はお控えください。
手順
- CloudFormation からデプロイする
- 対象とする EC2 インスタンス、RDS インスタンスへタグを設定する
CloudFormation からデプロイする
下のボタンから CloudFormation の画面へ遷移します。
対象の EC2 / RDS は同一リージョンからしか検索しないため、必要に応じて、リージョンを変更してください。
CloudFormation テンプレートは URL が入力されていますので、そのまま「Next」をクリックします。
パラメータを設定します。
デフォルト設定の場合、state-scheduler
:True
のタグが設定された EC2インスタンス、RDSインスタンスを日本時間の月〜金の24時に停止し、月〜金の6時に起動します。平日の6時〜24時のみ起動している、ということになります。
パラメータ名 | 説明 | デフォルト値 |
---|---|---|
StartSchedule | 起動を実行するスケジュールをUTCタイムゾーンで cron 式で記述します。 cron 式についてはこちら | 0 21 ? * SUN-THU * |
StopSchedule | 停止を実行するスケジュールをUTCタイムゾーンで cron 式で記述します cron 式についてはこちら | 0 15 ? * MON-FRI * |
TagKey | 起動/停止したいEC2、RDSに設定するタグのキー | state-scheduler |
TagValue | 起動/停止したいEC2、RDSに設定するタグの値 | True |
設定したら「Next」をクリックします。
オプションはそのまま「Next」をクリックします。
チェックボックスをチェックし、「Next」をクリックします。(IAM を操作する場合は承認操作としてチェックボックスへのチェックが必要)
CloudFormation Stack の完了を待ちます。
EC2 インスタンス、RDS インスタンスへタグを設定する
EC2 のタグ設定画面から対象となるインスタンスを選択し、CloudFormation のパラメータで設定したタグを設定します。
RDS のインスタンス一覧画面から対象となるインスタンスを選択し、「Tags」ボタンをクリックします。「Add Tag」ボタンをクリックします。CloudFormation のパラメータで設定したタグを設定します。
以上で設定完了です。
動作確認
停止、起動の動作を確認します。
CloudWatch Events の時間を調整しました。14時に停止、14時10分に起動するように設定しました。
しばし、放置。。
CloudTrail のログから EC2 の API を確認します。
14:00 に EC2 インスタンスを停止、14:10 に EC2 インスタンスを起動しています。
RDS のログから動作を確認します。
14:06 に停止完了、14:15 に起動完了となっていますね。
まとめ
AWS の機能を使えば、このようなジョブ処理も簡単に実装できます。仕組みも、ソースコードもシンプルなので必要に応じて修正していただければと思います。特にリトライ処理は含まれていませんので、CloudFormation も Step Functions に対応したことだし、組み合わせて実装するのがいいと思います。